dgraymanfandomcom_it-20200213-history
Modulo:Linguaggi
local language = {} -- File di configurazione contenente due tabelle: -- lg.alias: per normalizzare gli alias a un codice unico -- lg.codici: che dato un codice restituisce un array contente -- nome della lingua e collegamento all'articolo su it.wiki dedicato alla lingua local lg = mw.loadData( 'Modulo:Linguaggi/Configurazione'); -- ritorna il nome della voce corrispondente a "code". Se "code" non corrisponde a nessuna -- lingua inserita in tabella ritorna una stringa nulla function language.get_voce(code) if code nil then return '' end local code = mw.ustring.lower(code) if lg.aliascode then code = lg.aliascode end lingua = lg.codicicode if lingua then return lingua2 end return '' end -- ritorna vero se "code" corrisponde a un linguaggio, falso altrimenti function language.esiste(code) if code nil or code '' then return false end if lg.aliascode then code= lg.aliascode end if lg.codicicode then return true end return false end -- ritorna il nome standard della lingua corrispondente a "code" e il codice normalizzato -- a quella della tabella codici -- Se "code" non corrisponde a nessuna lingua inserita in tabella ritorna la coppia valore di default -- o stringa nulla se questo non è indicato e il codice richiesto. Se maiuscolo è vero il -- nome viene ritornato con la prima lettera maiuscola function language.get_nome(code, maiuscolo, default) local nome = default or '' if code ~= nil and code ~= '' then code = mw.ustring.lower(code) if lg.aliascode then code = lg.aliascode end local lingua = lg.codicicode if lingua then nome = lingua1 end end if maiuscolo then nome = mw.ustring.gsub(nome, '^%l', mw.ustring.upper) end return nome, code end -- funzione di interfaccia per template:Nomelingua/voce function language.voce(frame) local code = frame.args1 if code nil or code '' then return '' end return language.get_voce(code) end -- funzione di interfaccia per template:Nomelingua/nome function language.nome(frame) local maiuscolo = false local code = frame.args1 or '' local default = (frame.args2 'v' and ) or code if frame.args'M'~=nil and frame.args'M'~= then maiuscolo = true end return language.get_nome(code, maiuscolo, default), _ end --funzione di interfaccia per template:Nomelingua function language.nomecompleto(frame) local code = frame.args1 if code nil or code '' then return '' end local maiuscolo = false if frame.args'M'~=nil and frame.args'M'~='' then maiuscolo = true end local voce = language.get_voce(code) local nome = language.get_nome(code, maiuscolo, code) if nome "" and voce ~="" then if maiuscolo then nome = mw.ustring.gsub(voce, '^%l', mw.ustring.upper) else nome = voce end end if voce "" then return nome else return table.concat({'", nome, ""}) end end --funzione di interfaccia per template:Lingue, se viene passato anche il parametro --usa_codice (qualunque sia il suo valore), allora il testo mostrato tra parentesi --viene normalizzato a quello standard della lingua, piuttosto che essere quello --passato --In aggiunta può ricevere se il paremtro return_error è vero ritorna in caso di --codici lingua non ritrovati in tabella una tabella aggiuntiva con i codici errati --return_error viene controllato solo se la funzione è richiamata da un modulo Lua --se è richiamata da un template è sempre falsa function language.lingue(frame) local lingue_list = { } -- Se chiamata mediante #invoke, usa gli argomenti passati al template invocante. -- Altrimenti a scopo di test assume che gli argomenti siano passati direttamente local args local return_error = false local error_list = {} if frame mw.getCurrentFrame() then args = frame:getParent().args else args = frame return_error = args'return_error' or False end local usa_codice = false local lingua, codice_normalizzato, code_to_show local usa_codice = (args'usacodice' ~= nil) for _,code in ipairs(args) do lingua, codice_normalizzato = language.get_nome(code) code_to_show = mw.ustring.upper((usa_codice and codice_normalizzato) or code) if lingua ~= "" then lingue_list#lingue_list+1 = '' ..code_to_show .. "" else lingue_list#lingue_list+1 = code if return_error then error_list#error_list+1 = code end end end local reply if #lingue_list > 0 then reply = '(' .. table.concat(lingue_list, ", ") .. ")" else reply = '' end reply = reply if #error_list>0 then return reply, error_list else return reply end end -- Restituisce una tabella con tutti i codici riconosciuti dal modulo function language.tabella(frame) -- genera una tabella codici -> lista alias e una di codici per ordinarla local alias_table = {} local codici_sorted = {} for code, _ in pairs(lg.codici) do alias_tablecode = {"" .. code .. ""} codici_sorted#codici_sorted+1 = code end for alias, code in pairs(lg.alias) do if alias_tablecode then table.insert(alias_tablecode, alias) end end table.sort(codici_sorted) local root = mw.html.create('table') root :addClass('wikitable sortable') :tag('tr') :tag('th'):wikitext('Codici'):done() :tag('th'):wikitext('template:Nomelingua/nome'):done() :tag('th'):wikitext('template:Nomelingua/voce'):done() :tag('th'):wikitext('template:Lingue') for _,code in ipairs(codici_sorted) do local code_string = table.concat(alias_tablecode, ", ") local nome, voce = language.get_nome(code), language.get_voce(code) if voce ~= '' then voce = '' .. voce .. '' end root :tag('tr') :tag('td'):wikitext(code_string):done() :tag('td'):wikitext(nome):done() :tag('td'):wikitext(voce):done() :tag('td'):css('text-align', 'center'):wikitext(language.lingue({code})) end return tostring(root) end -- Restituisce una tabella degli alias in formato alias;codice function language.tabella_alias(frame) local root = mw.html.create('table') root :addClass('wikitable sortable') :tag('tr') :tag('th'):wikitext('Alias'):done() :tag('th'):wikitext('codice'):done() for alias, code in pairs(lg.alias) do root :tag('tr') :tag('td'):wikitext(alias):done() :tag('td'):wikitext(code) end return tostring(root) end -- Restituisce una tabella dei codici in formato codice;nome;voce function language.tabella_codici(frame) local root = mw.html.create('table') root :addClass('wikitable sortable') :tag('tr') :tag('th'):wikitext('Codice'):done() :tag('th'):wikitext('Nome'):done() :tag('th'):wikitext('Voce'):done() for code, valore in pairs(lg.codici) do root :tag('tr') :tag('td'):wikitext(code):done() :tag('td'):wikitext(valore1):done() :tag('td'):wikitext(valore2) end return tostring(root) end -- ritorna una whitelist di tutti i codici riconosciuti ad uso bot in python function language.whitelist(frame) local rows = { 'WHITELIST_LINGUE = set( } -- genera una tabella codici -> lista alias e una di codici per ordinarla local codici = {} for code, _ in pairs(lg.codici) do codici[#codici+1 = code end for alias, _ in pairs(lg.alias) do codici#alias+1 = alias end table.sort(codici) for _, codice in ipairs(codici) do rows#rows+1 = " '" .. codice .."'," end rows#rows+1 = "])" return table.concat(rows, '\n') end return language